#ifndef BINARYIMAGE_HPP
#define BINARYIMAGE_HPP

//------------------------------------------------------------------------------
// Fichier d'entête utilisés
//------------------------------------------------------------------------------
#include "Image.hpp"

namespace ImageAnalysis
{
//----------------------------------------------------------------------
//Cette classe correspond à une image binaire, c'est à dire dont
//les pixels sont soit à zéro, soit à 1.
//----------------------------------------------------------------------
class BinaryImage : public Image
{
public:
        //----------------------------------------------------------------------
        // Structure
        //----------------------------------------------------------------------
		enum TBinaryValue { BLACK_VALUE=0, RESET_VALUE=127, WHITE_VALUE=255 };
		
        //----------------------------------------------------------------------
        // Constructeur
        //----------------------------------------------------------------------
        BinaryImage( int width, int height );

        //----------------------------------------------------------------------
        // Destructeur
        //----------------------------------------------------------------------
        virtual ~BinaryImage();

        //----------------------------------------------------------------------
        // Méthode retournant la valeur du pixel (0 ou 1) à l'index donné.
		// Contrat : l'index doit correspondre à un indice valide de l'image.
        //----------------------------------------------------------------------
        virtual unsigned char* GetPixel( int index );
		
        //----------------------------------------------------------------------
        // Méthode permettant de fixer la valeur d'un pixel de l'image.
		// Contrat : cette valeur doit être soit 0 soit 1 et l'index doit 
		// correspondre à un indice valide de l'image.
        //----------------------------------------------------------------------
        virtual void SetPixel( int index, unsigned char* value );

        //----------------------------------------------------------------------
        // Méthode permettant de dessiner l'image à l'écran.
        //----------------------------------------------------------------------
        virtual void Draw();

private:
        //----------------------------------------------------------------------
        // Constructeur par copie et oprérateur d'affectation en privée pour
        // interdire leur utilisation
        //----------------------------------------------------------------------
        BinaryImage( const BinaryImage& copy);
        BinaryImage& operator=( const BinaryImage& copy );
};

}
#endif //BINARYIMAGE_HPP
